var MyApp=angular.module('myapp', ['ui.bootstrap']);

//初始化化定义全局变量
MyApp.run(function($rootScope){
	$rootScope.listLocalTip="";//显示当前的图纸列表位置，如“项目1/水电图纸”
	$rootScope.currentTuzhi="";//用来显示当前项目"项目1/水电图纸"下的图纸
});

//===================用一个服务和一个指令实现angular的异步文件上传============
//用法<input type="file"file-model="myFile"/>
//var file = $scope.myFile;
//var resetfulUploadUrl = 'http://www.example.com/images';
//fileUploadSer.uploadFileToUrl(file, resetfulUploadUrl);
MyApp.directive('fileModel', ['$parse', function($parse){//指令将input里面的文件加到scope中
    return {
        restrict: 'A',
        link: function(scope, element, attrs){
            var model = $parse(attrs.fileModel);//同“myFile”
            var modelSetter = model.assign;//"如果是可以赋值的"
            element.bind('change', function(){
                scope.$apply(function(){
                    modelSetter(scope, element[0].files[0]);
                });
                //console.log(scope.myFile)
            });
        }
    };
}]);

//上传图纸构造form表单和resetful发送
MyApp.service('fileUploadSer', ['$http','$rootScope','commonSer', function($http,$rootScope,commonSer){//服务异步发送scope里面的文件
    this.uploadFileToUrl = function(file,textareaValues,resetfulUploadUrl){
    	//构造表单
        var fd = new FormData();
        fd.append('file', file);
        fd.append('author','wumingyu');//添加作者
        fd.append('beizhu',textareaValues);//上传文件的备注信息修改信息

        var time1 = commonSer.getNowFormatDate();//用了个通用服务得到日期
        fd.append('uploadTime',time1);//添加日期
        //发送表单
        $http.post(resetfulUploadUrl, fd, {
            transformRequest: angular.identity,
            headers: {'Content-Type': undefined}
        })
        .success(function(data){//后台成功返回
        	alert("上传成功"+data);
        	//上传成功后更新root作用域下的currentTuzhi//用来显示当前项目"项目1/水电图纸"下的图纸
        	$http.get("/upload/"+$rootScope.listLocalTip+"/currentJson/current.json").success(function(data){
        		 $rootScope.currentTuzhi=data;
        	});
        })
        .error(function(){
        	alert("上传失败resetful申请失败");
        });
    }
}]);


//====================================================
//服务，获取当前时间等通用函数
MyApp.service('commonSer',function(){
	//获取当前时间
	this. getNowFormatDate=function() {
	    var date = new Date();
	    var seperator1 = "-";
	    var seperator2 = ":";
	    var month = date.getMonth() + 1;
	    var strDate = date.getDate();
	    var hh=date.getHours();
	    var mm=date.getMinutes();
	    var ss=date.getSeconds()
	    if (month >= 1 && month <= 9) {//如果是0到9在其前面加个0变为09等
	        month = "0" + month;
	    }
	    if (strDate >= 0 && strDate <= 9) {
	        strDate = "0" + strDate;
	    }
	     if (hh >= 0 && hh <= 9) {
	        hh = "0" + hh;
	    }
	    if (mm >= 0 && mm <= 9) {
	        mm = "0" + mm;
	    }
	    if (ss >= 0 && ss <= 9) {
	        ss = "0" + ss;
	    }

	    var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate
	            + " " + hh + seperator2 + mm
	            + seperator2 + ss;
	    return currentdate;
	} 
});


//所有的resetful都在这也是与后台通信的接口
//restful服务,http的restful服务
MyApp.factory('myRestful',['$http',function($http){ 
	//var baseurl='/restful/onlineUsers/';
	return {
		loginCheck:function(dat){
			return $http.post('/restful/loginCheck/',dat);
		},
		//userDelete:function(userName){ //删除资源，退出或刷新时调用
		//	return $http.delete(baseurl+'/'+userName);
		//}
		addTuzhiFile:function(index,name){//添加图纸文件在项目index中，名字为name
			return $http.put('/restful/TuzhiFile/'+index+'/'+name);//put代表这个是新建一个资源
		},
		httpSendMsg:function(msg){ 
			return $http.post('/restful/addNewMsg',msg);//将新信息post给服务器
		}
	};
}]);


//主控制器含全局变量
MyApp.controller('bodyCtrl',[
	'$scope',
	'$rootScope',
	'$modal',//注入modal
	'$http',
	'$log',
	'myRestful',
	function ($scope,$rootScope,$modal,$http,$log,myRestful){
		var scopeModal = $rootScope.$new();
    	//模态框里面将要用到的函数，检测用户名
    	scopeModal.loginCheck=function(dat){
    		return myRestful.loginCheck(dat);
			//return $http.post('/restful/loginCheck/',dat);
		}

		//模态框登录打开函数
		$scope.open=function(size){
			var modalInstance = $modal.open({
      			templateUrl: 'mylogin.html',//在当前目录下找
      			controller: 'ModalLoginCtrl',
      			size: size,
      			//backdrop:"static",//点击空白处不会退出modal
      			keyboard :false, //按键盘esc不会退出modal
      			resolve: {//向模态框发送一些值，通过注入
        			//items: function () {//一个属性或对象可以在modal的控制器里面注入
          			//	return $scope.items;
        			//}
      			},
      			scope:scopeModal//给模块控制器中加入一个作用域
    		});

			//处理模态框返回的结果，selectedItem从modal中返回
			//回调结束后，then，这里的回调就是出现的modal
    		modalInstance.result.then(function (CName) {//cachUser为回调参数
      			$scope.CName = CName;//如果返回成功
      			console.log("关闭模态框成功");
      			//console.log($rootScope.gUser);
    		}, function () {
      			$log.info('Modal dismissed at: ' + new Date());
    		});
    	};
		//初始化页面
		$scope.myInit=function(){
    		//打印出sessionid
    		//if($cookies.SessionId){//如果存在sessionId
    		//	console.log($cookies);
    		//	longPoll();//开启心跳函数
    		//}else{//如果不存在sessionId，说明是第一次登录要打开登录界面
    			$scope.open() ;//让控制器加载时就运行，首次打开页面时
    		//}

    	}
    	$scope.myInit();
	}
]);




//模态框登录界面控制器，对应与mylogin.html里面的代码
MyApp.controller('ModalLoginCtrl',[
	'$scope',
	'$modalInstance',//父控制器的注入，可以提供close与dismiss方法
	//'items',//这个items是父控制器resolve返回并可以注入的
	function ($scope, $modalInstance) {
		
		$scope.nametip="请输入用户名";//用户名文本框的提示
		$scope.pwordtip="请输入密码";
		$scope.isNameErr=false;//用户名一开始是没错误的
		$scope.isPwordErr=false;//用户名一开始是没错误的

		$scope.loginUser={};//创建一个对象
		$scope.loginUser.LoginName="";//记录用户的昵称,命名与后端一致为好
		$scope.loginUser.Pword="";


		//单击登录按钮时
		$scope.login=function($http){

			if($scope.loginUser.LoginName==""){
				$scope.nametip="用户名不能为空";
				$scope.isNameErr=true;//会让一个class显示出来
				return; 
			}
			if($scope.loginUser.Pword==""){
				$scope.pwordtip="密码不能为空";
				$scope.isPwordErr=true;//会让一个class显示出来
				return; 
			}
			$scope.loginCheck($scope.loginUser).success(function(data){
				console.log(data);
				if(data.CName=="cant find user"){//没有找到匹配的用户名
					$scope.loginUser.LoginName="";
					$scope.nametip="不存在此用户";
					$scope.isNameErr=true;
					return;
				}
				if(data.CName=="cant find pword"){//密码不正确
					$scope.loginUser.Pword="";
					$scope.pwordtip="密码错误";
					$scope.isNameErr=false;
					$scope.isPwordErr=true;
					return;
				}else{
					//向调用modal的控制器返回一些东西
					$modalInstance.close(data.CName);//BodyCtrl,回调用的参数
				}

			})
		}
	}
]);

//手风琴菜单
MyApp.controller('AccordionCtrl',[
	'$scope',
	'$modal',
	'$http',
	'$log',
	'myRestful',
	'$rootScope',
	//'$http',//为了获取json
	function ($scope,$modal,$http,$log,myRestful,$rootScope) {
		$scope.oneAtATime = true;//同时只能打开一个
		//得到手风琴要显示的列表
		$http.get('json/projectList.json').success(function(data){
  			$scope.groups = data;//用于显示手风琴列表
		});
		//单击手风琴的每一个项目时
		$scope.choseFile=function(pro,nameFile){
			$rootScope.listLocalTip=pro+"/"+nameFile;
			//改变图纸列表的json获取
			$http.get("/upload/"+$rootScope.listLocalTip+"/currentJson/current.json")
				.success(function(data){
        			 $rootScope.currentTuzhi=data;
        		})
        		.error(function(){
        			console.log("获取失败或不存在"+"/upload/"+$rootScope.listLocalTip+"/currentJson/current.json")
        			$rootScope.currentTuzhi="";//不显示图纸列表
        		});
		};
		//单击添加图纸项目按钮时
		$scope.addProject=function(ind){//ind代表是哪个项目序号需要新建一个图纸文件
			//console.log(ind);
			var modalInstance = $modal.open({
      			templateUrl: 'addProTuzhi.html',//在当前目录下找
      			controller: 'ModalAddProCtrl',
      			size: "sm",//lg sm 空
      			//backdrop:"static",//点击空白处不会退出modal
      			keyboard :false, //按键盘esc不会退出modal
      			resolve: {//向模态框发送一些值，通过注入
        			//items: function () {//一个属性或对象可以在modal的控制器里面注入
          			//	return $scope.items;
        			//}
      			},
      			//scope:scopeModal//给模块控制器中加入一个作用域
    		});

			//处理模态框返回的结果，selectedItem从modal中返回
			//回调结束后，then，这里的回调就是出现的modal
    		modalInstance.result.then(function (newTuzhiName) {//cachUser为回调参数
    			//在项目ind中添加图纸名称
      			myRestful.addTuzhiFile(ind,newTuzhiName).success(function(){
      				//如果申请后台修改json成功，更新手风琴列表
      				$http.get('json/projectList.json').success(function(data){
  						$scope.groups = data;//用于显示手风琴列表
  						//console.log($scope.groups)
					});
      			});
    		}, function () {
      			$log.info('Modal dismissed at: ' + new Date());
    		});

		}
	}
]);

//添加图纸项目的modal的控制器，对应addProTuzhi.html，AccordionCtrl引用
MyApp.controller('ModalAddProCtrl',[
	'$scope',
	'$modalInstance',//父控制器的注入，可以提供close与dismiss方法
	//'items',//这个items是父控制器resolve返回并可以注入的
	function ($scope, $modalInstance) {
		$scope.newTuzhiName="";
		$scope.ok=function(){//单击确定按钮时
			$modalInstance.close($scope.newTuzhiName); //将新的文件名传到手风琴
		};
		$scope.cancel=function(){//单击取消按钮
			$modalInstance.close(""); //取消传空值
		}
	}
]);

//右侧主显示图纸列表
MyApp.controller('mainListCtrl',[
	'$scope',
	'$modal',//注入modal
	'$http',
	'$log',
	'$rootScope',
	'fileUploadSer',
	function ($scope,$modal,$http,$log,$rootScope,fileUploadSer){
		var scopeModal = $rootScope.$new();
		//给model一个上传文件的服务
		scopeModal.uploadFileToUrl=function(file,textareaValues,resetfulUploadUrl){
			return fileUploadSer.uploadFileToUrl(file, textareaValues,resetfulUploadUrl);
		}
		$scope.items = ['item1', 'item2', 'item3'];
		
		//在$rootScope.listLocalTip路径下面添加图纸，会随点击手风琴而改变
		
		$scope.addTuzhi=function(url){
			//如果还没选择手风琴里面的文件，就是$rootScope.listLocalTip为空，那么就不执行并提示
			if($rootScope.listLocalTip==""){
				alert("你还没选择要上传到的文件项目，请现在左侧选择一个项目文件。");
				return;
			}
			scopeModal.listLocalTip=$rootScope.listLocalTip;//打开模态框前先将当前的目录传到模态框的作用域
			//上传图纸的模态框
			var modalInstance = $modal.open({
      			templateUrl: 'uploadTuzhi.html',
      			controller: 'ModalUploadTuzhiCtrl',
      			size: "",//lg sm 空
      			//backdrop:"static",//点击空白处不会退出modal
      			keyboard :false, //按键盘esc不会退出modal
      			resolve:{//向模态框发送一些值，通过注入
                     //items:function() { return $scope.items; },
                },
      			scope:scopeModal//给模块控制器中加入一个作用域
    		});

			//处理模态框返回的结果，selectedItem从modal中返回
			//回调结束后，then，这里的回调就是出现的modal
    		modalInstance.result.then(function (newTuzhiName) {//cachUser为回调参数
    			
    		}, function () {
      			$log.info('Modal dismissed at: ' + new Date());
    		});
		};
	}
]);

//上传图纸的modal的控制器，对应uploadTuzhi.html，mainListCtrl引用
MyApp.controller('ModalUploadTuzhiCtrl',[
	'$scope',
	//'fileUploadSer',//上传文件的服务要配合fileModel指令
	'$modalInstance',//父控制器的注入，可以提供close与dismiss方法
	//'items',//这个items是父控制器resolve返回并可以注入的
	function ($scope, $modalInstance) {
		$scope.newTuzhiName="";
		$scope.myTip="";//当单击上传按钮时如果不符合填写条件会给出一些提示
		$scope.myTipShow=false;//代表是否显示tip
		$scope.textareaValues="";//备注textarea里面的值

		//单击关闭按钮时关闭tip
		$scope.closeTip=function(){
			$scope.myTipShow=false;//代表是否显示tip
		};
		$scope.fileNameChanged=function(inputvalue){//当你选择一个文件上传时候
			$scope.uploadFileName=inputvalue;//更新在文件名后的显示
			$scope.$apply(); //强制通知更新
		};
		$scope.ok=function(){//单击确定上传按钮时
			if($scope.myFile==undefined){//如果没有选择上传的文件
				$scope.myTip="请选择上传的文件"
				$scope.myTipShow=true;//代表是否显示tip
				return;
			};
			//如果备注的说明没有或者字数太少，少于15字
			if($scope.textareaValues.length<15){
				$scope.myTip="备注的字数太少，最少为15字，当前为"+$scope.textareaValues.length;
				$scope.myTipShow=true;//代表是否显示tip
				return;
			};
			console.log($scope.myFile);
			//用自定义的指令和服务上传文件到服务器，myFile是指令导入的值
			var file = $scope.myFile;
			var resetfulUploadUrl = '/restful/upload/'+$scope.listLocalTip;
			//resetful申请上传文件
			$scope.uploadFileToUrl(file,$scope.textareaValues,resetfulUploadUrl);
			//$modalInstance.close($scope.newTuzhiName); //将新的文件名传到手风琴
			$modalInstance.close();
		};
		$scope.cancel=function(){//单击取消按钮
			$modalInstance.close(""); //取消传空值
		}
	}
]);
